package com.itheima.reggie.controller;

import com.github.pagehelper.PageInfo;
import com.itheima.reggie.common.R;
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.entity.Page;
import com.itheima.reggie.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    /**
     * 作用：用户登录
     * @param employee  用户提交username与password过来，封装到该对象中
     * @return
     */
    @PostMapping("/login")
    public R login(@RequestBody  Employee employee, HttpSession session){
        //1. 调用service的登录方法，返回一个R对象
        R<Employee> result = employeeService.login(employee);
        //2. 判断是否登录成功，登录成功需要在session中做一个登录成功标记
        if(result.getCode()==1){
            session.setAttribute("employee",result.getData().getId());
        }
        //3. 返回给前端
        return result;

    }


    /**
     * 作用： 用户退出
     * 用户退出有两种方案：
     *      1. 从session中清除登录成功标记    session.removeAttribute("user");
     *      2. 直接删除session。   session.invalidate();   建议，因为删除session可以释放内存
     *
     */
    @PostMapping("/logout")
    public R logout(HttpSession session){
        session.invalidate();
        return R.success("退出登录");
    }


    /**
     * 作用：员工添加
     */
    @PostMapping
    public R save(@RequestBody  Employee employee, HttpSession session){
        //1. 先从session中取出当前登录的用户
        Long empId = (Long) session.getAttribute("employee");
        //2. 补全员工的创建人与修改人
        employee.setCreateUser(empId);
        employee.setUpdateUser(empId);
        //3. 调用service方法进行添加
        employeeService.save(employee);
        return R.success("添加成功");
    }

    /**
     * 作用：员工列表分页
     */
    @GetMapping("/page")
    public R  page(@RequestParam(defaultValue = "1") Integer page,
                   @RequestParam(defaultValue = "10") Integer pageSize,String name){
      Page<Employee> pageBean =  employeeService.findByPage(page,pageSize,name);
      return R.success(pageBean);  //springmvc的json的转换器，把数据转换为json写出.
    }



    /**
     * 作用：修改员工信息
     */
    @PutMapping
    public R  updateEmp(@RequestBody Employee employee,HttpSession session){
        //补全修改人
        //1.先从session中取出当前登录的用户
        Long empId = (Long) session.getAttribute("employee");
        //2. 补全员工的创建人与修改人
        employee.setUpdateUser(empId);
        employeeService.updateEmp(employee);
        return R.success("修改成功");
    }


    /**
     * 作用：根据id查询员工的信息
     */
    @GetMapping("/{id}")
    public R  findById(@PathVariable  Long id){
        Employee employee =  employeeService.findById(id);
        return R.success(employee);
    }

}
